package org.nidy.programexercise.MethodCitation;

import java.util.*;
import java.util.function.IntFunction;
/*
* 方法引用-01-引用静态方法
* 方法引用-02-引用其他类实例成员方法
* 方法引用-03-引用本类或父类的成员方法
* 方法引用-04-引用构造方法
* 方法引用-05-类名引用成员方法
* 方法引用-06-引用数组构造方法
*/

public class MethodCitation {
    public static void main(String[] args) {
        Integer[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        // 匿名内部类方式排序
        Arrays.sort(arr, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2-o1;
            }
        });
        System.out.println(Arrays.toString(arr));
        //Lambda 表达式方式排序
        Arrays.sort(arr, (o1, o2) -> o2-o1);
        System.out.println(Arrays.toString(arr));
        //方法引用方式排序
        Arrays.sort(arr,MethodCitation::substraction);
        System.out.println(Arrays.toString(arr));
        System.out.println("===============引用其他类方法======================");
        Arrays.sort(arr,new MethodUtils()::substraction);
        System.out.println(Arrays.toString(arr));
//        System.out.println("===============引用父类方法======================");
//        Arrays.sort(arr,super::substraction);
        System.out.println("===============方法引用-05-类名引用成员方法======================");
        List<String> list = new ArrayList<>();
        Collections.addAll(list,"abc","def","ghi");
        list.stream().map(String::toUpperCase).forEach(System.out::println);
        System.out.println("===============方法引用-06-引用数组构造方法======================");
        ArrayList<Integer>arr1 =new ArrayList<>();
        Collections.addAll(arr1,1,2,3,4,5,6,7,8,9,10);
        Integer[] array = arr1.stream().toArray(Integer[]::new);
        System.out.println(Arrays.toString(array));
    }
    public static int substraction(int a,int b){
        return b-a;
    }
}
